package ar.uba.fi.algo3.algoTank.controller;

import ar.uba.fi.algo3.algoTank.model.Vector;
import ar.uba.fi.algo3.algoTank.model.cuarteles.Cuartel;
import ar.uba.fi.algo3.algoTank.model.escenarios.Escenario;
import ar.uba.fi.algo3.algoTank.model.formas.Rectangulo;
import ar.uba.fi.algo3.algoTank.model.tanques.AlgoTank;
import ar.uba.fi.algo3.algoTank.model.tanques.GrizzlyBattleTank;
import ar.uba.fi.algo3.algoTank.model.tanques.IFVTank;
import ar.uba.fi.algo3.algoTank.model.tanques.MirageTank;
import ar.uba.fi.algo3.algoTank.util.Constantes;
import ar.uba.fi.algo3.algoTank.view.VistaAlgoTank;
import ar.uba.fi.algo3.algoTank.view.VistaCuartel;
import ar.uba.fi.algo3.algoTank.view.VistaEscenario;
import ar.uba.fi.algo3.algoTank.view.VistaTanqueEnemigo;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;

public class JuegoController implements ObjetoVivo {

	private ControladorJuego controlador = null;
	private Escenario unEscenario = null;
	private AlgoTank elAlgoTank = null;
	//private MirageTank unTanqueEnemigo = null;
	//private IFVTank unTanqueEnemigo = null;
	private GrizzlyBattleTank unTanqueEnemigo = null;
	private Cuartel elCuartel = null;
	private VistaAlgoTank vistaAlgoTank = null;
	private VistaCuartel vistaCuartel = null;
	private VistaTanqueEnemigo vistaTanqueEnemigo = null;

	public JuegoController(SuperficieDeDibujo superficieDeDibujo) {
		unEscenario = Escenario.getInstancia();

		elAlgoTank = AlgoTank.getInstancia();
		elCuartel = Cuartel.getInstancia();
		unTanqueEnemigo = new GrizzlyBattleTank(new Rectangulo(Constantes.BASE_MIRAGETANK, Constantes.ALTURA_MIRAGETANK, new Vector(300, 300)));

		unEscenario.agregarObjeto(elAlgoTank);
		unEscenario.agregarObjeto(elCuartel);
		unEscenario.agregarObjeto(unTanqueEnemigo);

		controlador = new ControladorJuego(false);
		controlador.setSuperficieDeDibujo(superficieDeDibujo);
		controlador.agregarKeyPressObservador(new EscuchadorAlgoTank(elAlgoTank));

		VistaEscenario vistaEscenario = new VistaEscenario();
		vistaEscenario.setPosicionable(unEscenario);

		vistaAlgoTank = new VistaAlgoTank(elAlgoTank);
		vistaCuartel = new VistaCuartel();
		vistaCuartel.setPosicionable(elCuartel);
		vistaTanqueEnemigo = new VistaTanqueEnemigo(unTanqueEnemigo);

		controlador.agregarObjetoVivo(elAlgoTank);
		controlador.agregarObjetoVivo(unTanqueEnemigo);
		controlador.agregarObjetoVivo(this);

		controlador.agregarDibujable(vistaEscenario);
		controlador.agregarDibujable(vistaAlgoTank);
		controlador.agregarDibujable(vistaCuartel);
		controlador.agregarDibujable(vistaTanqueEnemigo);

		controlador.setIntervaloSimulacion(5);
	}

	public void comenzar() {
		controlador.comenzarJuegoAsyn();
	}

	public void detener() {
		controlador.detenerJuego();
	}

	public void vivir() {

	}

	public ControladorJuego getControlador() {
		return controlador;
	}

	public void setControlador(ControladorJuego controlador) {
		this.controlador = controlador;
	}
}
